package com.kongchengji.zhanguafou.controller;
import com.kongchengji.zhanguafou.constant.WxInfo;
import com.kongchengji.zhanguafou.service.ICPService;
import com.kongchengji.zhanguafou.service.ServerService;
import com.kongchengji.zhanguafou.service.StationService;
import com.kongchengji.zhanguafou.service.SubscribeService;
import com.kongchengji.zhanguafou.utils.ParseXmlUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
@RestController
public class CallBackController {
    @Autowired
    private SubscribeService subscribeService;
    @Autowired
    private ServerService serverService;
    @Autowired
    private StationService stationService;
    @Autowired
    private ICPService icpService;


    private Logger logger = LoggerFactory.getLogger(CallBackController.class);
    /**
     *
     *微信服务器会将所有的信息转发到这接口
     * @param request 带有发送者等信息
     * @return "success"或空字符串微信将不会处理
     */
    @RequestMapping("/checkSignature")
    public String defaultReply(HttpServletRequest request){
        try {
            //解析微信的xml数据
            Map<String,String> map = ParseXmlUtil.parseXml(request.getInputStream());
            //查询服务器监控信息
            if("SELECT_SERVER".equals(map.get("EventKey"))){
               return serverService.selecServert(map);
            }
            //查询监控站点信息
            if("SELECT_STATION".equals(map.get("EventKey"))){
                return stationService.selectStation(map);
            }
            //查询备案信息
            if("SELECT_ICP".equals(map.get("EventKey"))){
                return icpService.selectByOpenId(map);
            }
            //订阅事件
            if("subscribe".equals(map.get("Event")) || "unsubscribe".equals(map.get("Event"))){
                subscribeService.subscribeEvent(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 微信公众平台绑定域名时要通过该接口验证，之后微信服务器会将一些信息都转发到该接口,将将其改造成了上面那个接口，验证后这个接口也就没作用了
     */
//    @RequestMapping(value = "/checkSignature",method = RequestMethod.GET)
//    @ResponseBody
//    public String checkSignature(String signature,String timestamp,String nonce,String echostr){
//        /**
//         * 将token、timestamp、nonce三个参数进行字典序排序
//         * 并拼接为一个字符串
//         */
//        String sortStr = sort(WxInfo.TOKEN,timestamp,nonce);
//        /**
//         * 字符串进行shal加密
//         */
//        String mySignature = shal(sortStr);
//        /**
//         * 校验微信服务器传递过来的签名 和  加密后的字符串是否一致, 若一致则签名通过
//         */
//        if(!"".equals(signature) && !"".equals(mySignature) && signature.equals(mySignature)){
//            return echostr;
//        }else {
//            logger.error("-----校验签名失败-----");
//        }
//        return "";
//    }
//
//
//
//    /**
//     * 参数排序
//     * @param token 微信公众号中填写的令牌
//     * @param timestamp 请求参数中的时间戳
//     * @param nonce  参数中的随机字符串
//     * @return 返回排序后的参数字符串
//     */
//    public String sort(String token, String timestamp, String nonce) {
//        String[] strArray = {token, timestamp, nonce};
//        //数组字典排序
//        Arrays.sort(strArray);
//        StringBuilder sb = new StringBuilder();
//        for (String str : strArray) {
//            sb.append(str);
//        }
//        return sb.toString();
//    }
//
//
//
//    /**
//     * 字符串进行shal加密
//     * @param str
//     * @return
//     */
//    public String shal(String str){
//        try {
//            MessageDigest digest = MessageDigest.getInstance("SHA-1");
//            digest.update(str.getBytes());
//            byte[] messageDigest = digest.digest();
//            StringBuilder hexString = new StringBuilder();
//            // 字节数组转换为 十六进制 数
//            for (int i = 0; i < messageDigest.length; i++) {
//                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
//                if (shaHex.length() < 2) {
//                    hexString.append(0);
//                }
//                hexString.append(shaHex);
//            }
//            return hexString.toString();
//
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        }
//        return "";
//    }


}
